// export const num = 1
// // ts 类型
// // 变量声明: 类型 = 值
// const bool = true
// const bool1 = false

// // 数字
// const num1 = 123


// // 字符串
// const str1 = '1'
// const str2 = "123123"
// const str3 = `1231231`

// // 数组
// const arr1: number[] = [1, 2, 3, 4]

// // 元组 Tuple
// const t1: [number, boolean] = [1, true]
// // const [value, setValue] = useState(1)

// // 枚举
// enum Color {
// 	Red,
// 	Green,
// 	Yellow
// }

// // console.log(Color.Red)
// // console.log(Color.Green)
// // console.log(Color.Yellow)
// // console.log(Color[0])
// // console.log(Color[1])
// // console.log(Color[2])

// // Any 任意类型
// let a: any = 1

// a = '1231'
// a = () => { }

// // Void  函数没有返回值

// const fn = () => {
// }

// const result = fn()


// // Null 和 Undefined

// const n = null
// const u = undefined

// const num2: number = undefined

// //  Never： never类型表示的是那些永不存在的值的类型。

// function fn123(): never {
// 	while (true) {
// 		console.log(1)
// 	}
// }


// // object  不建议使用
// const arr123: object = []
// const obj: object = { name: '张三' }
// const ff: object = () => { }
// const date: object = new Date()
// const num123: object = new Number()

// export {}

// 封装求和函数，实现不定参数的求和

export function add(...arr: number[]) {
	return arr.reduce((p, n) => {
		return p + n
	}, 0)
}

const s1 = add(1, 2, 3, 4)
const s2 = add(5, 6, 7, 8, 10)

console.log(s1, s2)


// 封装函数， 接受字符串类型的数组，返回数组的最长的字符串的信息
function getLongStr(arr: string[]) {
	let longStr = ''
	arr.forEach(str => {
		if(str.length > longStr.length) {
			longStr = str
		}
	})
	return longStr
}

const s3 = getLongStr(['hello', 'wor1231231ld', '1234567'])
console.log(s3);

<h1>哈哈哈</h1>

